苦于没有 Go 实战项目?也许本文的一些想法可以试试
The following article is from Go语言中文网 Author 站长polaris
实践是最好的学习!但新手学习完 Go 基础后,却不知道如何进行实践,因为很多人工作中还没有机会使用 Go。这里是一些对初学者友好的项目和资源,可以作为你项目实践的基础,甚至在将来项目中使用。
01 实现 ZIP 算法
这个项目可以很有趣,也可能很无聊。也许你觉得标准库已经实现了。但造轮子对学习是很有帮助的,而且有标准库的实现,可以更好的对比自己实现的优劣。
通过练习这个项目,你能学习到:
ZIP 算法的原理; 文件系统的工作方式; 如何阅读 RFC 文件[1];
02 美化 panic
相信有些人第一次看到 panic 输出的消息时,不知道如何阅读,不清楚到底在说什么,到底哪里出错了。出于帮助自己或帮助别人的目的,我们可以创建一个库,将 panic 输出的消息更友好的展示,方便阅读。
通过这个库,你将学习到:
错误处理; 字符串操作; 如何实现一个自己的库;
03 基于 Web 和 CLI 的下载管理器
开发一个下载服务,如果能够显示下载进度,这对使用者来说是很友好的,这样的下载进度功能的实现可以基于 Web 或 CLI。
尝试自己进行需求分析和设计。例如,如何从互联网读取文件,然后将文件写入本地磁盘。通过执行这两个步骤,大体上,你就实现了一个下载器。你可以一步步添加和增强相关功能来改进它。
Go 语言中文网公众号之前推荐过相关的开源项目。
通过练习这个项目,你能学到:
使用 HTTP 相关包/库从网路读取文件; 使用 os 包写文件到磁盘,已经恢复功能(断点续传); 通过 goroutine 管理多个连接同时写一个文件; 使用 CLI I/O 分析输入参数并显示适当的进度条; 使用与 Web 相关的函数/库创建 Web 界面;
04 基于 Web 或 CLI 的闹钟或提醒器
使用日历添加闹钟或提醒的 CLI 或 Web 应用。如果你认为这很容易,试着写一篇关于它的文章。
通过这个项目,你将学习到:
time 包的使用; 如何管理终端的输入、输出; 处理 Web 相关的知识,比如 HTTP、模板等;
05 数据库管理器(类似 Adminer)
Adminer[2] 是一个很棒的数据库管理器,但它是 PHP 实现的,如果用 Go 实现的话,单个文件就可以部署,特别方便,而且可以利用 Go 其他的优势,可以快速构建一个基于 Web 的数据库管理器。
通过这个项目,你将学习到:
Web 相关的库和知识; SQL 语法; 管理用于浏览和管理数据库、表、行或列的数据库; 如何管理使用 DB 时可能发生的安全问题;
06 CLI 文件管理器
有一个 C 语言项目:https://github.com/jarun/nnn,它是一个基于终端的文件管理器。你可以尝试使用 Go 实现一个。这个项目适合有点挑战的。
通过这个项目,你将学习到:
文件系统相关操作的实现(比如 list、copy、delete、paste、open 或 read 等); 为 CLI 应用创建 UI; 使用 goroutine 管理后台任务(比如复制一个大文件);
07 聊天室
这个项目可以是基于普通 TCP 长连接的聊天室,也可以是基于 WebSocket 的聊天室。这里会涉及一些细节,可以参考一些现实中的聊天室,实现一个。
Go 语言中文网发布过一系列 Go 和 React 构建聊天室的文章。
通过这个项目,你将学习到:
WebSocket 的原理、API 和 Go 对其操作; Goroutine 和 channel 的使用; Socket 编程;
08 发布系统
基于 Git 创建一个发布系统,这是一个 Web 项目,但同时也会涉及比较多的 Unix 相关命令操作,还会涉及权限、角色等。
通过这个项目,你将学习到:
对 Git 相关命令更熟悉,掌握相关工作原理; 在 Go 中如何运行 bash 命令; 权限系统相关知识; Web 知识;
以上这些项目是一个引子,供参考,主要想帮助那些觉得不知道如何实战的 Go 爱好者。其他常见的实战项目,比如博客、社区等。希望各位能够通过实践更好的掌握 Go 语言。
参考资料
RFC 文件: https://www.ietf.org/rfc/rfc1951.txt
[2]Adminer: https://www.adminer.org/
推荐阅读
我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。
坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio